格式本地化

    当它被开启时,访问相同内容的两个用户可能会看到以不同方式格式化的日期、时间和数字,这取决于它们的当前地区的格式。

    格式化系统默认是禁用的。需要在你的设置文件中设置来启用它。

    注意

    为了方便起见,[USE_L10N = True]($store-ref-settings.html#std:setting-USE_L10N) 的设置。但是要注意,要开启千位分隔符的数字格式化,你需要在你的设置文件中设置USE_THOUSAND_SEPARATOR = True。或者,你也可以在你的模板中使用来格式化数字。

    注意

    USE_I18N 是另一个独立的并且相关的设置,它控制着Django是否应该开启翻译。详见。

    格式化开启之后,Django可以在表单中使用本地化格式来解析日期、时间和数字。也就是说,在表单上输入时,它会尝试不同的格式和地区来猜测用户使用的格式。

    注意

    Django对于展示数据,使用和解析数据不同的格式。尤其是,解析日期的格式不能使用%a(星期名称的缩写),%A (星期名称的全称),%b (月份名称的缩写), %B(月份名称的全称),或者%p(上午/下午)。

    只是使用localize参数,就能开启表单字段的本地化输入和输出:

    当你使用USE_L10N来开启格式化的时候,Django会尝试使用地区特定的格式,无论值在模板的什么位置输出。

    然而,这对于本地化的值不可能总是十分合适,如果你在输出JavaScript或者机器阅读的XML,你会想要使用去本地化的值。你也可能想只在特定的模板中使用本地化,而不是任何位置都使用。

    localize

    在包含的代码块内开启或关闭模板变量的本地化。

    这个标签可以对本地化进行比更加精细的操作。

    这样做来为一个模板激活或禁用本地化:

    1. {% load l10n %}
    2. {% localize on %}
    3. {{ value }}
    4. {% endlocalize %}
    5. {% localize off %}
    6. {{ value }}

    注意

    在 {% localize %}代码块内并不遵循f 的值。

    对于在每个变量基础上执行相同工作的模板过滤器,参见localize 和 。

    localize

    强制单一值的本地化。

    例如:

    使用来在单一值上禁用本地化。使用localize 模板标签来在大块的模板区域内控制本地化。

    unlocalize

    强制单一值不带本地化输出。

    例如:

    1. {{ value|unlocalize }}

    使用localize来强制单一值的本地化。使用模板标签来在大块的模板区域内控制本地化。

    Changed in Django 1.8:

    添加了指定FORMAT_MODULE_PATH为列表的功能。之前只支持单一的字符串值。

    指定你首先放置格式文件的位置来使用自定义格式。把你的设置设置为格式文件存在的包名来使用它,例如:

    文件并不直接放在这个目录中,而是放在和地区名称相同的目录中,文件也必须名为formats.py

    需要这样一个结构来自定义英文格式:

    1. mysite/
    2. formats/
    3. __init__.py
    4. en/
    5. __init__.py
    6. formats.py

    其中formats.py包含自定义的格式定义。例如:

    使用非间断空格(Unicode 00A0)作为千位分隔符,来代替英语中默认的逗号。

    一些地区对数字使用上下文敏感的格式,Django的本地化系统不能自动处理它。

    瑞士的数字格式化取决于被格式化的数字类型。对于货币值,使用逗号作为千位分隔符,以及使用小数点作为十进制分隔符。对于其它数字,逗号用于十进制分隔符,空格用于千位分隔符。Django提供的本地格式使用通用的分隔符,即逗号用于十进制分隔符,空格用于千位分隔符。